package org.spiniper.im.data.model;

import java.io.Serializable;

import org.spiniper.im.data.model.enums.DataChannelStatus;

/**
 * 数据块，数据传输最小完整单位，
 * @author spiniper
 *
 */
public interface DatasChannel extends Serializable {
	
	/**
	 * 数据获取当前状态
	 * @return 当前状态
	 */
	DataChannelStatus getStatus();
	
	/**
	 * 获取数据
	 * @return
	 */
	Serializable getData();
	
	/**
	 * 是否拥有数据
	 * @return
	 */
	boolean hasData();
	
	/**
	 * 数据起始偏移
	 * @return
	 */
	int start();
	
	/**
	 * 抽取数据长度
	 * @return
	 */
	int length();
	
	/**
	 * 获取数据总长度
	 * @return
	 */
	long total();
	
	/**
	 * 附加信息，客户端或者服务器给与的附加信息
	 * @return
	 */
	Serializable getTag();
}
